Skip to content


ai  101  pytorch  classification  nvidia  cuda  install  tensorrt  yolo  ardupilot  None  ros2  dds  micro ros  xrce  sitl  plugin  SITL  debug  rangefinder  pymavlink  mavros  gazebo  distance sensor  system_time  timesync  cmake  gtest  ctest  cpp  c++  format  fmt  multithreading  spdlog  camera  coordinate system  orb  matching  opencv  build  transformation  computer vision  homography  optical flow  of  trackers  cv  cyclonedds  eprosima  fastdds  simulation  config  ignition  bridge  sdf  tips  ign-transport  sensors  lidar  aptly  apt  encryption  pgp  docker  git  bundle  github  hooks  pre-commit  lxd  container  lxc  x11  profile  vscode  marpit  presentation  marp  markdown  mermaid  video  ffmpeg  gstreamer  cheat-sheet  sdp  v4l2loopback  gi  snippets  cheat Sheet  python  asyncio  future  click  cli  numpy  project  template  black  isort  docs  project document  docstrings  flake8  linter  git-hook  mypy  unittest  pytest  pylint  mock  iterator  generator  logging  tuple  namedtuple  typing  annotation  pyzmq  zmq  msgpack  action  namespace  remap  control2  ros2_control  gdb  qos  tag  plugins  msg  node  zero-copy  shm  tutorial  algorithm  calibration  diff  pid  dev  colcon  colcon_cd  rpi  arm  qemu  settings  behavior  plot  visualization  debugging  diagnostic  diagnostics  tutorials  gst  math  apm  rat_runtime_monitor  web  rosbridge  vue  binding  discovery  gazebo-classic  launch  spawn  cook  gps  imu  ray  gazebo_ros_ray_sensor  ultrsonic  range  ultrasonic  gazebo classic  wrench  effort  odom  ign  gz  xacro  ros_ign  diff_drive  odometry  joint_state  argument  OpaqueFunction  DeclareLaunchArgument  LaunchConfiguration  tmux  nav  slam  test  rclpy  executor  MultiThreadedExecutor  SingleThreadedExecutor  param  dynamic-reconfigure  service  client  setup.py  package.xml  parameter  parameters  custom  msgs  executers  pub  sub  rqt  rviz  rviz2  pose  marker  tf2  deb  package  setup  local_setup  rosdep  package manager  project settings  vcstool  cross-compiler  nano  texture  tmuxp  rootfs  embedded  zah  linux  rm  ubuntu  ip  ss  network  netstat  snap  deploy  ssh  systemd  mkdocs  extensions  socat  networking  serial  udp  tc  mtu  select  px4  robotics  kalman_filter  kalman  filter  control  todo  vscode-ext  json  yaml  schema  yocto  poky  world  gazebo_ros2_control  position_controller  effort_controller  velocity_controller  urdf  gazebo_ros_force  gazebo_ros_joint_state_publisher  robot_state_publisher  joint_state_publisher  projects  vrx  buoyancy 

ROS2 Params more control


Base on previous let do more investigation on ROS2 params

Demo (global parameter event)#

  • Subscribe to parameter_events topic
terminal1
ros2 run pkg_python_tutorial param_basic
terminal2
ros2 topic list
#
/parameter_events
/rosout

# echo/subscribe topic
ros2 topic echo /parameter_events
terminal3
# change my_int param value
ros2 param set /basic my_int 20
terminal2
stamp:
  sec: 1674824296
  nanosec: 912765941
node: /basic
new_parameters: []
changed_parameters:
- name: my_int
  value:
    type: 2
    bool_value: false
    integer_value: 20
    double_value: 0.0
    string_value: ''
    byte_array_value: []
    bool_array_value: []
    integer_array_value: []
    double_array_value: []
    string_array_value: []
deleted_parameters: []
---

Demo2 (control parameter from service)#

Ros2 Node implement build in service to control Node parameters

terminal1
ros2 service list
#
/basic/describe_parameters
/basic/get_parameter_types
/basic/get_parameters
/basic/list_parameters
/basic/set_parameters
/basic/set_parameters_atomically
terminal2
ros2 service call /basic/list_parameters 
rcl_interfaces/srv/ListParameters
#
requester: making request: rcl_interfaces.srv.ListParameters_Request(prefixes=[], depth=0)

response:
rcl_interfaces.srv.ListParameters_Response(result=rcl_interfaces.msg.ListParametersResult(names=['use_sim_time', 'my_str', 'my_int'], prefixes=[]))

#

ros2 service call /basic/list_parameters rcl_interfaces/srv/ListParameters "{ prefixes: ["my"] }"
#
requester: making request: rcl_interfaces.srv.ListParameters_Request(prefixes=['my'], depth=0)

response:
rcl_interfaces.srv.ListParameters_Response(result=rcl_interfaces.msg.ListParametersResult(names=['my_str', 'my_int'], prefixes=[]))

call service tips

  • The request data must be inside "
  • Key, Value must have space between them prefixes: ["my"]

get_parameters#

ros2 service call /basic/get_parameters rcl_interfaces/srv/GetParameters "{ names: [my_int] }"
#
requester: making request: rcl_interfaces.srv.GetParameters_Request(names=['my_int'])

response:
rcl_interfaces.srv.GetParameters_Response(values=[rcl_interfaces.msg.ParameterValue(type=2, bool_value=False, integer_value=20, double_value=0.0, string_value='', byte_array_value=[], bool_array_value=[], integer_array_value=[], double_array_value=[], string_array_value=[])])